/**
 * @brief 给服务器发送一个数据，告诉服务器要发送1024字节的数据，但是实际发送的数据不足1024，查看服务器处理结果
 * @details 1.如果服务器只发送一次,服务器将得不到完整的请求，就不会处理业务，客户端也就得不到响应，最终超时关闭连接
 * 2.连着给服务器发送了多次 小的请求，服务器会将后边的请求当做前边请求的正文来进行处理，
 * 而后便处理的时候有可能就因为处理错误而关闭连接
 */

/**
 * @details 连着给服务器发送了多次 小的请求,服务器解析出错，返回错误，关闭连接，
 * 但是关闭连接的时候如果缓冲区里面有数据，由不足一行数据，取不出来，而关闭连接的时候有数据又会启动
 * 有消息的事件，就会再次触发OnMassage回调函数，一直循环，解决办法，解析出错，就情况缓冲区的数据
 * 第一次解析错误的时候，状态码为RECV_HTTP_ERROR，没有更新状态，那么下次再进去的时候，状态还是RECV_HTTP_ERROR
 * 此时解析http的函数并不会读取数据，所以缓冲区中的数据一直处理不完，解决办法重置状态
 */

#include "../source/server.hpp"

int main()
{
    // 创建客户端连接
    Socket clientsock;
    clientsock.CreateClient(8080, "127.0.0.1");
    std::string req = "GET /hello HTTP/1.1\r\nConnection: keep-alive\r\nContent-Length: 100\r\n\r\nHello world";
    for (;;)
    {
        assert(clientsock.Send(req.c_str(), req.size()) != -1);
        assert(clientsock.Send(req.c_str(), req.size()) != -1);
        assert(clientsock.Send(req.c_str(), req.size()) != -1);
        assert(clientsock.Send(req.c_str(), req.size()) != -1);
        char buffer[1024] = {0};
        assert(clientsock.Recv(buffer, 1023));
        LogMessage(DEBUG, "[%s]", buffer);
        sleep(3);
    }

    clientsock.Close();
    return 0;
}
